# -*- coding =utf-8 -*-
# @Time : 2022/9/15 14:08
# @Author :1814-09胡海燕
# @File : 4-5.py
# @Software : PyCharm
# 乌龟吃鱼游戏（oop）
# 1)假设游戏场景为范围（x, y）为0<=x<=10，0<=y<=10
# 2)游戏自动生成1只乌龟对象和10条鱼对象（位置随机）
# 3)它们的移动方向（上下左右）均随机
# 4)乌龟的最大移动能力是2（它随机选择移动1或2），鱼儿的最大移动能力是1
# 5)当移动到场景边缘，自动向反方向移动
# 6)乌龟初始化体力为100，每移动一次，体力消耗1
# 7)鱼的初始体力为10，每移动一次体力消耗1，消耗到零时需要停5秒不移动，后体力恢复为10（此条有余力可加）
# 8)当乌龟和鱼坐标重叠，乌龟吃掉鱼，乌龟体力增加20
# 9)乌龟每行动一次输出当前坐标[x,y]，吃掉鱼时输出提示
# 游戏结束条件：当乌龟体力值为0（乌龟死掉）或者鱼儿的数量为0（乌龟赢）游戏结束
# 提示：
# 把龟和鱼封装成类，定义龟类的属性：体力、坐标，方法：吃鱼和移动。
#                  鱼类的属性：名字、坐标，方法：移动。
import random


class BaseAnimal(object):

    def __init__(self):
        self.x = random.randint(0, 11)
        self.y = random.randint(0, 11)

    def zuobiao(self, zuobiao):  # 判断坐标是否越界
        if zuobiao < 0:
            return 0 - zuobiao
        elif zuobiao > 9:
            return 9 - (zuobiao - 9)
        return zuobiao


class Turtle(BaseAnimal):
    def __init__(self):
        super(Turtle, self).__init__()
        self.power = 100

    def move(self):  # 移动
        move_skill = [-1, 1, 0, 1, 2]  # 乌龟最大移动能力为2
        new_x = self.x + random.choice(move_skill)
        new_y = self.y + random.choice(move_skill)
        self.x = self.is_vaild(new_x)
        self.y = self.is_vaild(new_y)
        self.power -= 1

    def eat(self):  # 吃
        self.power += 20


class Fish(BaseAnimal):
    def move(self):
        move_skill = [-1, 1, 0]
        new_x = self.x + random.choice(move_skill)
        new_y = self.y + random.choice(move_skill)
        self.x = self.is_vaild(new_x)
        self.y = self.is_vaild(new_y)

    def main():
        t1 = Turtle()
        fishs = [Fish() for i in range(10)]  # 10条鱼
        while True:  # 判断游戏是否结束
            if t1.power <= 0:
                print("乌龟被累死啦！游戏结束！")
            elif len(fishs) == 0:
                print("鱼被吃光啦！游戏结束！")
            else:  # 乌龟和鱼移动
                t1.move()
                for fish in fishs:
                    fish.move()
                    if t1.x == fish.x and t1.y == fish.y:
                        t1.eat()
                        fishs.remove(fish)
                        print("鱼被吃掉")
                        print("乌龟当前体力值为：%s" % (t1.power))

    main()
